package com.um.springboot.starter.service;

import com.um.springboot.starter.constants.SmsConsts;

import java.util.LinkedHashMap;

/**
 * @author 甘天伟
 * @since 2024/5/7
 * 版权所有 广州优匠科技有限公司
 */
public interface SmsService {

    /**
     * 发送短信验证码
     *
     * @param mobile 手机号
     * @param code   验证码
     * @return 是否成功
     */
    default boolean sendCode(String mobile, String code) {
        return sendCode("+86", mobile, code);
    }

    /**
     * 发送短信验证码
     *
     * @param mobileAreaCode 国家代码
     * @param mobile         手机号
     * @param code           验证码
     * @return 是否成功
     */
    default boolean sendCode(String mobileAreaCode, String mobile, String code) {
        return sendCode(mobileAreaCode, mobile, code, SmsConsts.VERIFICATION_CODE_TEMPLATE);
    }

    /**
     * 发送短信验证码
     *
     * @param mobileAreaCode 国家代码
     * @param mobile         手机号
     * @param code           验证码
     * @param template       模板
     * @return 是否成功
     */
    default boolean sendCode(String mobileAreaCode, String mobile, String code, String template) {
        LinkedHashMap<String, String> params = new LinkedHashMap<>();
        params.put("code", code);
        return send(mobileAreaCode, mobile, template, params);
    }

    /**
     * 发送短信
     *
     * @param mobile         手机号
     * @param template       模板
     * @param params         模板参数
     * @return 是否成功
     */
    default boolean send(String mobile, String template, LinkedHashMap<String, String> params) {
        return send("+86", mobile, template, params, null);
    }

    /**
     * 发送短信
     *
     * @param mobileAreaCode 国家代码
     * @param mobile         手机号
     * @param template       模板
     * @param params         模板参数
     * @return 是否成功
     */
    default boolean send(String mobileAreaCode, String mobile, String template, LinkedHashMap<String, String> params) {
        return send(mobileAreaCode, mobile, template, params, null);
    }

    /**
     * 发送短信
     *
     * @param mobileAreaCode 国家代码
     * @param mobile         手机号
     * @param template       模板
     * @param params         模板参数
     * @param customSmsProps 自定义配置
     * @return 是否成功
     */
    boolean send(String mobileAreaCode, String mobile, String template, LinkedHashMap<String, String> params, Object customSmsProps);

}
